package com.example.module_mvp.presenter

import com.example.module_mvp.bean.UserBean
import com.example.module_mvp.model.UserRepositoryImpl
import com.example.module_mvp.view.IUserView

/**
 * 逻辑分析：
 * - UserPresenter 接收View和Model的引用，实现依赖注入。
 * - loadUser 方法负责加载用户信息，并根据结果调用View的方法更新界面。
 * - 这样设计使得Presenter可以独立于Android组件进行测试，提高可测试性。
 *
 * 好处：
 * 单元测试清晰
 * 维护性强，长期项目更加友好
 * 协同开发，团队协作开发明确
 */
class UserPresenterImpl(private val userRepository: UserRepositoryImpl) : IPresenter {


    private var view: IUserView? = null

    override fun attachView(view: IUserView) {
        this.view = view
    }

    override fun detachView() {
        this.view = null
    }

    override fun addUser(name: String) {
        if (name.isEmpty()) {
            view?.showError("用户名不能为空")
            return
        }

        try {
            val newUser = UserBean(id = userRepository.getNextId(), name = name)
            userRepository.addUser(newUser)
            loadUsers() // 重新加载数据并更新视图
            view?.clearInput()
        } catch (e: Exception) {
            view?.showError("添加用户失败: ${e.message}")
        }
    }

    override fun loadUsers() {
        val users = userRepository.getAllUsers()
        view?.showUser(users)
    }

}